package string;

class Student{
    public String name;
    public int age;
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Test {
    public static void main(String[] args) {
        // 去掉首尾空格
        String s = "  hhh   ";
        System.out.println(s);
        System.out.println(s.trim());
    }
    public static void main7(String[] args) {
        // 字符串的截取
        String s = "helloworld";
        // 从指定位置截取到结尾
        System.out.println(s.substring(4));
        // 从beginindex位置截取到endindex位置
        System.out.println(s.substring(2,5)); // 包括2 不包括5
    }
    public static void main6(String[] args) {
        // 字符串拆分
        String s = "hello world";
        String[] str = s.split(" ");
        for (int i = 0; i < str.length; i++) {
            System.out.println(str[i]);
        }
        System.out.println("==================");
        // 部分拆分
        String s1 = "hello world hello world";
        String[] str1 = s1.split(" ",3);// 拆成三部分
        for (int i = 0; i < str1.length; i++) {
            System.out.println(str1[i]);
        }
        System.out.println("==================");
        // 需要使用转义符号的拆分
        String s2  = "190.2.3.85";
        String[] str2 = s2.split("\\.");
        for (int i = 0; i < str2.length; i++) {
            System.out.println(str2[i]);
        }
        // 如果是要用/当分隔符
        String s3  = "190\\2\\3\\85";
        String[] str3 = s3.split("\\\\");
        for (int i = 0; i < str3.length; i++) {
            System.out.println(str3[i]);
        }
        System.out.println("===================");
        // 用多个分隔符分割
        String s4 = "hh hhh&joh&iuha";
        String[] str4 = s4.split("&| ");
        for (int i = 0; i < str4.length; i++) {
            System.out.println(str4[i]);
        }
    }
    public static void main5(String[] args) {
        // 字符串替换
        String s = "ababcabcdabcde";
        System.out.println(s.replace('a', 'f'));
        System.out.println(s.replace("ab","ff"));
        System.out.println(s.replaceFirst("a","f"));
        System.out.println(s.replaceAll("abc","hhh"));
    }
    public static void main4(String[] args) {
        // 转化
        // 1. 数值和字符串转化
        String s1 = String.valueOf(123);
        String s2 = String.valueOf(12.34);
        String s3 = String.valueOf(true);
        String s4 = String.valueOf(new Student("haha", 20));

        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);

        System.out.println("=====================");
        // 2. 大小写转化
        String s5 = "hello";
        String s6 = "HELLO";

        System.out.println(s5.toUpperCase());
        System.out.println(s6.toLowerCase());

        System.out.println("====================");
        // 3. 字符串和数组的转化
        String s7 = "hello";
        char[] array = s7.toCharArray();
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
        String s8 = new String(array);
        System.out.println(s8);

        System.out.println("====================");

        // 4. 格式化
        String s = String.format("%d:%d:%d",10,46,59);
        System.out.println(s);
    }
    public static void main3(String[] args) {
        // 字符串查找
        String s1 = "ababcabcdabcde";
        // 返回index位置上的字符
        System.out.println(s1.charAt(1));
        // 返回第一次ch出现的位置
        System.out.println(s1.indexOf('b'));
        // 从 fromIndex位置开始找 第一次ch 出现的位置
        System.out.println(s1.indexOf('a',1));
        // 字符串 str 第一次出现的位置
        System.out.println(s1.indexOf("abc"));
        // 从 fromIndex位置开始找 字符串 str 第一次出现的位置
        System.out.println(s1.indexOf("ab",3));
        // 从后往前找 第一次出现 ch 的下标
        System.out.println(s1.lastIndexOf('a'));
        // 从 fromIndex位置开始从后往前找 第一次出现 ch 的下标
        System.out.println(s1.lastIndexOf('a',8));
        // 从后往前找 第字符串 str 第一次出现的位置
        System.out.println(s1.lastIndexOf("ab"));
        // 从 fromIndex位置开始 从后往前找 第字符串 str 第一次出现的位置
        System.out.println(s1.lastIndexOf("ab",8));


    }
    public static void main2(String[] args) {
        // String 对象的比较
        // 1. == 使用==比较的是String引用的对象是否为同一个
        String s1 = new String("hello");
        String s2 = new String("hello");
        String s3 = s1;
        System.out.println(s1 == s2);
        System.out.println(s1 == s3);
        System.out.println(s2 == s3);
        System.out.println("====================");

        // 2. equals() 使用equals方法比较的是String引用的对象的内容
        // Object中的equals方法中使用的其实也是==，但是String类对该方法进行了重写
        // equals 使用字典顺序比较
        String s4 = new String("hello");
        String s5 = new String("world");
        String s6 = new String("world");
        System.out.println(s4.equals(s5));
        System.out.println(s4.equals(s6));
        System.out.println(s5.equals(s6));
        System.out.println("===============================");

        // 3. compareTo() 返回的是int类型 如果前面的大就返回正数，相等返回0，前面的小返回负数
        // 先直接进行字符串的比较，如果全部一样再进行字符串长短的比较
        String ss1 = new String("hello");
        String ss2 = new String("hell");
        String ss3 = new String("world");
        String ss4 = new String("world");
        System.out.println(ss1.compareTo(ss2));
        System.out.println(ss2.compareTo(ss1));
        System.out.println(ss1.compareTo(ss3));
        System.out.println(ss3.compareTo(ss4));
    }
    public static void main1(String[] args) {
        // String 对象的构造
        // 1. 使用常量串
        String s1 = "hello";
        System.out.println(s1);

        // 2. new String 对象
        String s2 = new String("hello");
        System.out.println(s2);

        // 3. 字符数组进行构造
        char[] array = {'h','e','l','l','o'};
        String s3 = new String(array);
        System.out.println(s3);
    }
}
